package 蓝桥杯_2013;

import java.util.Scanner;

/*
  标题:幸运数
    幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成
    首先从1开始写出自然数1,2,3,4,5,6.....
     1就是第一个幸运数
     我们从2这个数开始。把所有序号能被2整除的项删除,变为
     1-3-5-7_9.......

     把它们缩紧,重新记序,为:
     1,3,5,7,9....这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去
     注意,是序号位置,不是那个数本身能否被3整除!!删除的应该是5,11,17......。

     此时7为第3个幸运数,然后再删去序号位置能被7整除的(19,39,.....)

     最后剩下的序列类似:
     1,3,7,9,13,15,21,25,31,33,37,43,49,51,63,67,69,73,75,79.....

     本题要求:
       输入两个正整数mn,用空格分开(m<n<1000*1000)
       程序输出位于m和n之间的幸运数的个数(不包含m和n)

     例如
       用户输入:
        1 20
       程序输出:
        5
     例如:
       用户输入:
        30 69
       程序输出:
        8

 */
public class Test06_幸运数 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        // 构建数组
        int[] array = new int[n];
        for (int i = 0; i < n; i++) {
            array[i] = 2 * i + 1;
        }
        // 定义幸运数的下标
        int luck_index = 1;
        while (true) {
            // 记录数字向前挪动的坑位
            int p = luck_index + 1;
            for (int i = 1 + luck_index; i < n; i++) {
                if ((i + 1) % array[luck_index] == 0) {

                } else {
                    array[p] = array[i];
                    p++;
                }
                if (array[i] > n) {
                    break;
                }
            }

            for (int i = 0; i < n; i++) {
                System.out.print(array[i] + " ");
            }
            System.out.println();

            luck_index++; // 幸运数不断前移
            if (array[luck_index] >= n) {
                break;
            }
        }

        int ans = 0;
        for (int i = 0; i < n; i++) {
            if (array[i] >= n) {
                break;
            }
            if (array[i] > m) {
                ans++;
            }
        }
        System.out.println(ans);
    }

}
